use std::fmt::{Debug, Display};

/// 有时你需要对泛型类型进行约束，以确保它们实现了某些 trait。
/// 例如，你可能希望泛型类型实现了 `PartialOrd` trait，以便可以进行比较操作：
/// 参阅 `t3301_generic_func` 的 `largest` 方法
/// ```rust
/// fn largest<T: PartialOrd>(list: &[T]) -> &T {
///     let mut largest = &list[0];
/// 
///     for item in list {
///         if item > largest {
///             largest = item;
///         }
///     }
/// 
///     largest
/// }
/// ```
fn test_generic_trait() {

}

// 你可以使用 + 符号来指定多个 trait 约束：
fn some_function<T: Display + Clone, U: Clone + Debug>(t: T, u: U) -> i32 {
    // 函数体
    5
}
// 当泛型约束变得复杂时，可以使用 where 从句来使代码更清晰：
fn some_function2<T, U>(t: T, u: U) -> i32
    where
        T: Display + Clone,
        U: Clone + Debug,
{
    // 函数体
    5
}